<?php
namespace app\common;

use think\Container;
use think\facade\Env;

class Small{
    protected $request;
    protected $module_path;
    protected $view;

    public function __construct()
    {
        $this->request = Container::get('request');

        $this->module_path = Env::get('module_path');

        $this->view    = Container::get('view')->init(
            [
                // 模板引擎类型 支持 php think 支持扩展
                'type'         => 'ThinkSmall',
                // 默认模板渲染规则 1 解析为小写+下划线 2 全部转换小写
                'auto_rule'    => 1,
                // 模板路径
                'view_base'    => $this->module_path . 'small' . DIRECTORY_SEPARATOR . 'view' . DIRECTORY_SEPARATOR ,

                'view_path'    => '',
                // 模板后缀
                'view_suffix'  => 'html',
                // 模板文件名分隔符
                'view_depr'    => DIRECTORY_SEPARATOR,
                // 模板引擎普通标签开始标记
                'tpl_begin'    => '{',
                // 模板引擎普通标签结束标记
                'tpl_end'      => '}',
                // 标签库标签开始标记
                'taglib_begin' => '{',
                // 标签库标签结束标记
                'taglib_end'   => '}',
            ]
        );

        // 控制器初始化
        $this->initialize();
    }

    // 初始化
    protected function initialize()
    {}

    private function getChildClassName(){
        return get_class($this);
    }

    /**
     * 加载模板输出
     * @access protected
     * @param  string $template 模板文件名
     * @param  array  $vars     模板输出变量
     * @param  array  $config   模板参数
     * @return mixed
     */
    protected function fetch($template = '', $vars = [], $config = [])
    {
        if( $template == '' ){
            $className = $this->getChildClassName();
            $arrClassName = explode('\\', $className);
            $funName = debug_backtrace()[1]['function'];
            $template = strtolower( $arrClassName[count($arrClassName)-1] ) . '/' . $funName;
        }

        return $this->view->fetch($template, $vars, $config);
    }

    /**
     * 渲染内容输出
     * @access protected
     * @param  string $template 模板文件名
     * @param  array  $vars    模板输出变量
     * @param  array  $config  模板参数
     * @return mixed
     */
    protected function display($template = '', $vars = [], $config = [])
    {
        if( $template == '' ){
            $className = $this->getChildClassName();
            $arrClassName = explode('\\', $className);
            $funName = debug_backtrace()[1]['function'];
            $template = strtolower( $arrClassName[count($arrClassName)-1] ) . '/' . $funName;
        }

        return $this->view->display($template, $vars, $config);
    }

    /**
     * 模板变量赋值
     * @access protected
     * @param  mixed $name  要显示的模板变量
     * @param  mixed $value 变量的值
     * @return $this
     */
    protected function assign($name, $value = '')
    {
        $this->view->assign($name, $value);

        return $this;
    }
}